// config/api.js - 全局API配置
const config = {
  // 开发环境
  development: {
    baseURL: "http://localhost:8082", // 本地开发IP
    apiPrefix: "/api", // API前缀
    timeout: 10000,
    // 开发环境跳过域名校验
    skipDomainCheck: true,
    // 跨域配置
    cors: {
      enabled: true,
      credentials: true,
      methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
      headers: ["Content-Type", "Authorization", "X-Requested-With"],
    },
  },
  // 测试环境（手机预览使用）
  test: {
    baseURL: "http://192.168.2.3:8082", // 手机预览时也使用本地IP
    apiPrefix: "/api", // API前缀
    timeout: 10000,
    // 测试环境跳过域名校验
    skipDomainCheck: true,
    // 跨域配置
    cors: {
      enabled: true,
      credentials: true,
      methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
      headers: ["Content-Type", "Authorization", "X-Requested-With"],
    },
  },
  // 生产环境
  production: {
    baseURL: "https://www.lanjingyu.com",
    apiPrefix: "/api", // API前缀
    timeout: 10000,
    // 生产环境严格域名校验
    skipDomainCheck: false,
    // 跨域配置
    cors: {
      enabled: true,
      credentials: true,
      methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
      headers: ["Content-Type", "Authorization", "X-Requested-With"],
    },
  },
};

// 获取当前环境
const getEnv = () => {
  // 可以通过编译时环境变量或者运行时判断
  // 这里使用简单的方式，可以根据实际需求调整
  if (typeof __wxConfig !== "undefined") {
    return __wxConfig.envVersion === "develop" ? "development" : "production";
  }
  // 在Node.js环境中，默认使用开发环境
  return "development";
};

// 检测是否为手机预览环境
const isMobilePreview = () => {
  try {
    // 检查是否在微信环境中
    if (typeof wx !== "undefined" && wx.getSystemInfoSync) {
      const systemInfo = wx.getSystemInfoSync();
      // 如果是在真机上运行，且不是开发者工具
      return systemInfo.platform !== "devtools";
    }
    return false;
  } catch (e) {
    return false;
  }
};

// 获取当前环境的配置
const getCurrentConfig = () => {
  const env = getEnv();

  // 检查是否有手动指定的环境
  const manualEnv = wx.getStorageSync("api_env");
  if (manualEnv && config[manualEnv]) {
    console.log(`使用手动指定的环境: ${manualEnv}`);
    return config[manualEnv];
  }

  // 如果是开发环境但在手机预览，使用测试环境配置
  if (env === "development" && isMobilePreview()) {
    console.log("检测到手机预览环境，使用测试环境配置");
    return config.test;
  }

  return config[env];
};

// 导出当前环境的配置
const currentConfig = getCurrentConfig();

// 构建完整的API基础URL
const apiBaseURL = currentConfig.baseURL + currentConfig.apiPrefix;

// 手动切换环境的工具函数
const switchEnvironment = (env) => {
  if (config[env]) {
    wx.setStorageSync("api_env", env);
    console.log(`已切换到环境: ${env}`);
    // 重新加载页面以应用新配置
    wx.showModal({
      title: "环境切换",
      content: `已切换到 ${env} 环境，需要重新启动小程序`,
      showCancel: false,
      success: () => {
        wx.reLaunch({
          url: "/pages/index/index",
        });
      },
    });
  } else {
    console.error(`环境 ${env} 不存在`);
  }
};

// 获取当前使用的环境信息
const getCurrentEnvInfo = () => {
  const manualEnv = wx.getStorageSync("api_env");
  const env = getEnv();
  const isMobile = isMobilePreview();

  return {
    detectedEnv: env,
    manualEnv: manualEnv,
    isMobilePreview: isMobile,
    currentBaseURL: currentConfig.baseURL,
    actualEnv: manualEnv || (env === "development" && isMobile ? "test" : env),
  };
};

module.exports = {
  baseURL: currentConfig.baseURL,
  apiPrefix: currentConfig.apiPrefix,
  apiBaseURL: apiBaseURL, // 完整的API基础URL
  timeout: currentConfig.timeout,
  cors: currentConfig.cors,
  skipDomainCheck: currentConfig.skipDomainCheck,
  // 也可以导出完整配置供其他地方使用
  config: currentConfig,
  // 环境信息
  env: getEnv(),
  // 工具函数
  switchEnvironment,
  getCurrentEnvInfo,
};
